home *** CD-ROM | disk | FTP | other *** search
/ Programming an RTS Game with Direct3D / Programming an RTS Game with Direct3D.iso / Examples / Chapter 14 / Example 14.1 / effect.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-01  |  3.2 KB  |  160 lines

  1. #ifndef RTS_EFFECT
  2. #define RTS_EFFECT
  3.  
  4. #include <windows.h>
  5. #include <d3dx9.h>
  6. #include <vector>
  7. #include "debug.h"
  8. #include "shader.h"
  9. #include "skinnedmesh.h"
  10. #include "mapobject.h"
  11.  
  12. void LoadEffectResources(IDirect3DDevice9 *m_pDevice);
  13. void UnloadEffectResources();
  14.  
  15. class SMOKE;
  16.  
  17. //Transform Help structure
  18. struct TRANSFORM
  19. {
  20.     TRANSFORM();
  21.     TRANSFORM(D3DXVECTOR3 _pos);
  22.     TRANSFORM(D3DXVECTOR3 _pos, D3DXVECTOR3 _rot);
  23.     TRANSFORM(D3DXVECTOR3 _pos, D3DXVECTOR3 _rot, D3DXVECTOR3 _sca);
  24.  
  25.     void Init(D3DXVECTOR3 _pos);
  26.     void Init(D3DXVECTOR3 _pos, D3DXVECTOR3 _rot);
  27.     void Init(D3DXVECTOR3 _pos, D3DXVECTOR3 _rot, D3DXVECTOR3 _sca);
  28.  
  29.     D3DXMATRIX GetWorldMatrix();
  30.  
  31.     D3DXVECTOR3 m_pos, m_rot, m_sca;    
  32. };
  33.  
  34. //Virtual EFFECT class...
  35. class EFFECT
  36. {
  37.     public:
  38.         EFFECT(IDirect3DDevice9 *Dev);
  39.         ~EFFECT(){}
  40.         virtual void Update(float timeDelta) = 0;
  41.         virtual void Render() = 0;
  42.         virtual bool isDead() = 0;
  43.  
  44.         void PreRender();
  45.         void PostRender();
  46.  
  47.         float m_time;
  48.         IDirect3DDevice9 *m_pDevice;
  49.         D3DXVECTOR4 m_color;
  50. };
  51.  
  52. class EFFECT_SPELL : public EFFECT
  53. {
  54.     public:
  55.         EFFECT_SPELL(IDirect3DDevice9 *Dev, D3DXVECTOR3 _pos);
  56.         void Update(float timeDelta);
  57.         void Render();
  58.         bool isDead();
  59.  
  60.     private:
  61.         TRANSFORM m_t1;
  62.         TRANSFORM m_c[10];
  63. };
  64.  
  65. class EFFECT_FIREBALL : public EFFECT
  66. {
  67.     public:
  68.         EFFECT_FIREBALL(IDirect3DDevice9 *Dev, D3DXVECTOR3 *bonePos, MAPOBJECT *_target, MAPOBJECT *_attacker);
  69.         void Update(float timeDelta);
  70.         void Render();
  71.         bool isDead();
  72.         D3DXVECTOR3 GetPosition(float m_prc);
  73.  
  74.     private:
  75.         D3DXVECTOR3 *m_pSrcBone;
  76.         float m_speed, m_length, m_prc;
  77.         D3DXVECTOR3 origin, dest;
  78.         MAPOBJECT *m_pTarget, *m_pAttacker;
  79.         int m_damage;
  80.         TRANSFORM m_t1;
  81. };
  82.  
  83. class EFFECT_LENSFLARE : public EFFECT
  84. {
  85.     public:
  86.  
  87.         struct FLARE
  88.         {
  89.             FLARE(D3DXCOLOR _color, float _place, float _scale, int _sourceFlare)
  90.             {
  91.                 color = _color;
  92.                 place = _place;
  93.                 scale = _scale;
  94.                 sourceFlare = _sourceFlare;
  95.             }
  96.  
  97.             D3DXCOLOR color;
  98.             float place;
  99.             float scale;
  100.             int sourceFlare;
  101.         };
  102.  
  103.         EFFECT_LENSFLARE(IDirect3DDevice9 *Dev, int _type, D3DXVECTOR3 _position);
  104.         void Update(float timeDelta);
  105.         void Render();
  106.         bool isDead();
  107.  
  108.     private:
  109.         float m_mainAlpha;
  110.         bool m_inScreen;
  111.         int m_type;
  112.         D3DXVECTOR3 m_position;
  113.         std::vector<FLARE> m_flares;
  114. };
  115.  
  116. class EFFECT_FIRE : public EFFECT
  117. {
  118.     public:
  119.         EFFECT_FIRE(IDirect3DDevice9 *Dev, D3DXVECTOR3 pos, D3DXVECTOR3 scale);
  120.         ~EFFECT_FIRE();
  121.         void Update(float timeDelta);
  122.         void Render();
  123.         bool isDead();
  124.         void PreRender();
  125.         void PostRender();
  126.         void Kill();
  127.  
  128.     private:
  129.         D3DXVECTOR3 m_targetScale;
  130.         TRANSFORM m_t1;
  131.         D3DXVECTOR3 m_camEye;
  132.         SMOKE *m_pSmoke;
  133.         bool m_dead;
  134. };
  135.  
  136. class EFFECT_SELECTED : public EFFECT
  137. {
  138.     public:
  139.         EFFECT_SELECTED(IDirect3DDevice9 *Dev);
  140.         void Update(float timeDelta);
  141.         void Render();
  142.         bool isDead();
  143.         void Set(float health, D3DXVECTOR3 pos, float rot, float scale);
  144.  
  145.         TRANSFORM m_t;
  146. };
  147.  
  148. class EFFECT_TRAINING : public EFFECT
  149. {
  150.     public:
  151.         EFFECT_TRAINING(IDirect3DDevice9 *Dev);
  152.         void Update(float timeDelta);
  153.         void Render();
  154.         bool isDead();
  155.         void Set(float progress, D3DXVECTOR3 pos);
  156.  
  157.         TRANSFORM m_t;
  158. };
  159.  
  160. #endif